#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
using namespace std;
typedef long long ll;
int m,num;
ll S,a[100005],p[100005];bool b[100050];
void init()
{
	for (int i=2;i<=100000;i++)
	{
		if (!b[i]) p[++num]=i;
		for (int j=1;j<=num&&p[j]*i<=100000;j++)
		{
			b[i*p[j]]=true;
			if (i%p[j]==0) break;
		}
	}
}
bool isprime(ll x)
{
	if (x==1) return false;
	if (x<=100000) return !b[x];
	for (int i=1;p[i]*p[i]<=x;i++) 
	if (x%p[i]==0) return false;
	return true;
}
void dfs(int last,ll now,ll rest) 
{
	if (rest==1) 
	{
		a[++m]=now;
		return ;
	}
	if (rest-1>p[last-1]&&isprime(rest-1)) a[++m]=now*(rest-1);
	
	for (int j=last;j<=num&&p[j]*p[j]<=rest;j++)
	{
		ll sum=p[j]+1,tmp=p[j];
		for (;sum<=rest;tmp=tmp*p[j],sum+=tmp)
		if (rest%sum==0) dfs(j+1,now*tmp,rest/sum);
	}
}

int main()
{
	init();
	while (scanf("%lld",&S)!=EOF) 
	{
		m=0;
		dfs(1,1,S);
		sort(a+1,a+m+1);
		printf("%d\n",m);
		for (int i=1;i<=m;i++) printf("%lld%c",a[i],i==m?'\n':' ');
	}
	return 0;
}
